iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Software Development

我在 Spring Boot 3 裡面挖呀挖呀挖系列 第 15

Day14 - Web開發:Spring MVC Auto-configuration

  • 分享至 

  • xImage
  •  

Day14 - Web開發:Spring MVC Auto-configuration

前言

寫了10幾天的文章了,每個開頭我們開的專案都會引spring-boot-starter-web這個場景啟動器,是時候開始好好研究Spring Boot如何寫Web囉!

專案建立

創建day13_logging module

https://ithelp.ithome.com.tw/upload/images/20230930/20128084n9Ie80wpda.png
https://ithelp.ithome.com.tw/upload/images/20230930/20128084vr5KtceU7d.png

溫故知新

還記得我們的起手式都會引入spring-boot-starter-web

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

故事就從@SpringBootApplication開始
https://ithelp.ithome.com.tw/upload/images/20230930/20128084jTDd15AZUv.png
發現這個自動裝配註解@EnableAutoConfiguration
https://ithelp.ithome.com.tw/upload/images/20230930/20128084zezBkytl6a.png
細節藏在這個@Import這個AutoConfigurationImportSelector.class中
https://ithelp.ithome.com.tw/upload/images/20230930/20128084YDQsnxCjpd.png
加入候選的載入的Configuration
https://ithelp.ithome.com.tw/upload/images/20230930/201280848vVwBd8Ha4.png
載入的設定檔寫在這裡
https://ithelp.ithome.com.tw/upload/images/20230930/20128084cO54n1dfZK.png
找到autoconfigure中的檔案
https://ithelp.ithome.com.tw/upload/images/20230930/20128084KRPCRKVnCx.png
我們要關注web場景的就這些
https://ithelp.ithome.com.tw/upload/images/20230930/20128084LZeEAz5M2s.png
從中可以找到綁定配置文件的xxxProperties

  1. SpringMVC的所有配置 spring.mvc (WebMvcProperties)
  2. Web場景通用配置 spring.web (WebProperties)
  3. 文件上傳配置 spring.servlet.multipart (MultipartProperties)
  4. 服務器的配置 server (ServerProperties)

預設配置組件

  • ContentNegotiatingViewResolver 與 BeanNameViewResolver作為視圖解析器
  • 預設靜態資源處理,將資源放在static資料夾下即可訪問
  • Converter,GenericConverter,Formatter组件,作為常用的數據類型轉換與格式化需求,ex.properties與yaml中的日期格式轉換2023/09/30 10:10:10
  • HttpMessageConverters,可以方便返回json等數據類型
  • MessageCodesResolver,國際化與錯誤消息處理
  • 支持靜態資源index.html
  1. 如果想保持 Spring Boot MVC 預設配置,並且自定義更多的 MVC 配置,如:interceptors, formatters, view controllers 等。可以使用@Configuration注解添加一個 WebMvcConfigurer 類型的配置類,並不要標注 @EnableWebMvc
  2. 如果想保持 Spring Boot MVC 預設配置,但要自定義核心組件實例,比如:RequestMappingHandlerMapping, RequestMappingHandlerAdapter, 或ExceptionHandlerExceptionResolver,給容器宣告一個 WebMvcRegistrations 組件
  3. 如果想全面接管 Spring MVC,不使用預設配置,那麼你可以 @Configuration 標注一個配置類,並加上 @EnableWebMvc注解,實現 WebMvcConfigurer 接口

We最佳實戰

三種方式

https://ithelp.ithome.com.tw/upload/images/20230930/20128084cIpbEU1omg.png

兩種模式

  1. 前後端分離:由@RestController response JSON data
  2. 前後端不分離:@Controller + Thymeleaf

Reference


上一篇
Day13 - Logging
下一篇
Day15 - Static Content
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言